// 存储上一次的剪贴板内容
let lastClipboardContent = '';
let isPageFocused = document.hasFocus();

// 监听页面焦点变化
document.addEventListener('visibilitychange', () => {
  isPageFocused = !document.hidden;
});

window.addEventListener('focus', () => {
  isPageFocused = true;
});

window.addEventListener('blur', () => {
  isPageFocused = false;
});

// 获取目标textarea元素
function getTargetTextarea() {
  let textarea = null;
  
  // 方法1：使用XPath
  const xpath = '/html/body/div[1]/div/div/div/div[2]/div/div/section/section/div/div/div[3]/div[1]/textarea';
  const result = document.evaluate(xpath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
  textarea = result.singleNodeValue;
  if (textarea) {
    console.log('通过XPath找到textarea');
    return textarea;
  }
  
  // 方法2：使用class选择器
  textarea = document.querySelector('textarea.arco-textarea[placeholder*="输入@切换模型"]');
  if (textarea) {
    console.log('通过class选择器找到textarea');
    return textarea;
  }
  
  // 方法3：使用所有textarea元素遍历
  const allTextareas = document.getElementsByTagName('textarea');
  for (let i = 0; i < allTextareas.length; i++) {
    const t = allTextareas[i];
    if (t.placeholder && t.placeholder.includes('输入@切换模型')) {
      console.log('通过遍历找到textarea');
      return t;
    }
  }
  
  // 方法4：使用更宽松的选择器
  textarea = document.querySelector('textarea.arco-textarea');
  if (textarea) {
    console.log('通过简单class选择器找到textarea');
    return textarea;
  }
  
  // 输出调试信息
  console.log('所有textarea元素：', allTextareas);
  console.log('当前页面HTML：', document.body.innerHTML);
  
  return null;
}

// 获取发送按钮元素
function getSendButton() {
  // 方法1：使用XPath
  const xpath = '/html/body/div[1]/div/div/div/div[2]/div/div/section/section/div/div/div[3]/div[2]/div[2]/div/div[3]/img';
  const result = document.evaluate(xpath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
  if (result.singleNodeValue) {
    return result.singleNodeValue;
  }
  
  // 方法2：使用选择器（备用方法）
  return document.querySelector('img[src*="send-dd67e95c.svg"]');
}

// 获取会话项目数量
function getSessionItemCount() {
  const sessions = document.querySelector('.sessions');
  if (sessions) {
    return sessions.querySelectorAll('.item.flex-c').length;
  }
  return 0;
}

// 获取最新会话项目的内容
function getLastItemContent() {
  const sessions = document.querySelector('.sessions');
  if (sessions) {
    const items = sessions.querySelectorAll('.item.flex-c');
    if (items.length >= 1) {
      const lastItem = items[items.length - 1];
      const content = lastItem.textContent || lastItem.innerText;
      return content.trim();
    }
  }
  return null;
}

// 监控会话项目数量变化
function monitorSessionItems(originalCount) {
  const checkInterval = setInterval(() => {
    const currentCount = getSessionItemCount();
    if (currentCount === originalCount + 1) {
      const content = getLastItemContent();
      if (content) {
        // 开始每秒输出最新会话内容
        const contentInterval = setInterval(() => {
          const latestContent = getLastItemContent();
          console.log('最新会话内容:', latestContent);
          
          if (latestContent && latestContent.trim() === '相关问题') {
            clearInterval(contentInterval);
            // 获取倒数第二个会话内容并移除标记
            const items = document.querySelector('.sessions').querySelectorAll('.item.flex-c');
            const secondLastItem = items[items.length - 2];
            const mdEditor = secondLastItem.querySelector('#md-editor-v3');
            if (mdEditor) {
                let text = mdEditor.textContent || mdEditor.innerText;
                text = text.replace('###输出完成###', '');
                
                // 写入剪贴板
                navigator.clipboard.writeText(text).then(() => {
                }).catch(err => {
                    console.error('写入剪贴板失败:', err);
                });
            } else {
                console.error('未找到md-editor元素');
            }
          }
        }, 1000); // 每秒输出一次
        
      } else {
        console.error('无法获取最新会话内容');
      }
      clearInterval(checkInterval); // 停止监控会话数量变化
    }
  }, 500); // 每500ms检查一次会话数量
  
  // 60秒后如果还没有检测到变化，就停止监控
  setTimeout(() => {
    clearInterval(checkInterval);
  }, 60000);
}

// 将内容写入textarea并点击发送
function writeToTextareaAndSend(content) {
  // 获取发送前的会话项目数量
  const originalCount = getSessionItemCount();
  console.log('发送前会话项目数量:', originalCount);

  const textarea = getTargetTextarea();
  if (textarea) {
    // 设置文本内容
    textarea.value = content;
    
    // 触发input事件，确保其他监听器能感知到变化
    const inputEvent = new Event('input', { bubbles: true });
    textarea.dispatchEvent(inputEvent);
    
    // 触发change事件
    const changeEvent = new Event('change', { bubbles: true });
    textarea.dispatchEvent(changeEvent);
    
    // 聚焦到textarea
    textarea.focus();
    
    //console.log('成功将内容写入textarea:', content);
    
    // 点击发送按钮
    setTimeout(() => {
      const sendButton = getSendButton();
      if (sendButton) {
        sendButton.click();
        console.log('成功点击发送按钮');
        // 开始监控会话项目数量变化
        monitorSessionItems(originalCount);
      } else {
        console.error('未找到发送按钮');
      }
    }, 500); // 延迟500ms再点击，确保内容已经正确填入
  } else {
    console.error('未找到目标textarea元素');
  }
}

// 检查内容是否符合特定格式
function isTargetContent(text) {
  const targetPattern = '如果你需要生成代码，对于每个需要更改的文件,你需要按 *SEARCH/REPLACE block* 的格式进行生成。';
  return text.includes(targetPattern);
}

// 定期检查剪贴板内容
async function checkClipboard() {
  // 只在页面获得焦点时才尝试读取剪贴板
  if (!isPageFocused) {
    return;
  }

  try {
    const clipboardText = await navigator.clipboard.readText();
    // 只有当内容发生变化时才处理
    if (clipboardText !== lastClipboardContent) {
      console.log('剪贴板内容已更改:', clipboardText);
      lastClipboardContent = clipboardText; // 更新上一次的内容
      
      // 检查内容是否符合特定格式
      if (isTargetContent(clipboardText)) {
        console.log('检测到目标内容，正在更新到界面...');
        // 将新内容写入textarea并点击发送
        writeToTextareaAndSend(clipboardText);
        
        // 发送消息到background script
        chrome.runtime.sendMessage({
          type: 'CLIPBOARD_CHANGE',
          content: clipboardText
        }, response => {
          console.log('收到background响应:', response);
        });
      } else {
        console.log('剪贴板内容不符合目标格式，已忽略');
      }
    }
  } catch (err) {
    // 只在页面获得焦点时才输出错误
    if (isPageFocused) {
      console.error('读取剪贴板失败:', err);
    }
  }
}

// 每秒检查一次剪贴板
setInterval(checkClipboard, 1000);
// 初始化消息
console.log('剪贴板监听助手已启动'); 
